package com.beidouapp.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.beidouapp.domain.pojo.Dict;
import com.beidouapp.domain.pojo.DictType;

public interface DictMapper
{
    /**
     * 从序列中获取一个新的字典ID
     * 
     * @return 字典ID
     */
    public Integer getNextDictId ();

    /**
     * 新增字典条目
     * 
     * @param dict 字典条目对象，其中dictItemId 等非空字段不能为null
     */
    public void addDict (Dict dict);

    /**
     * 修改字典条目
     * 
     * @param dict 字典条目对象，其中dictItemId不能为空，另外非空字段如果传入null，将不会被修改。
     */
    public void modifyDict (Dict dict);

    /**
     * 删除字典条目
     * 
     * @param dictItemId 字典条目标识，不能为null
     */
    public void removeDict (@Param ("dictItemId") Integer dictItemId);

    /**
     * 获取一个字典条目对象
     * 
     * @param itemCodeFqn 字典条目编码全路径
     * @param dictTypeCode 字典类型编码
     * @return 字典条目对象
     */
    public Dict getDict (@Param ("itemCodeFqn") String itemCodeFqn, @Param ("dictTypeCode") String dictTypeCode);

    /**
     * 获取一个字典条目对象
     * 
     * @param itemCodeFqn 字典条目编码全路径
     * @param dictTypeCode 字典类型编码
     * @return 字典条目对象
     */
    public Dict getDictById (@Param ("dictItemId") Integer dictItemId);

    /**
     * 获取指定字典条目对象的下一级条目
     * 
     * @param itemCodeFqn 父级字典条目编码全路径，如果为"/"，则表示取根级的条目。
     * @param dictTypeCode 字典类型编码
     * @return 下级字典条目对象集合
     */
    public List <Dict> findChildrenDict (@Param ("itemCodeFqn") String itemCodeFqn,
                                         @Param ("dictTypeCode") String dictTypeCode);
    
    /**
     * 获取指定字典类型对应的所有字典条目。
     * @param dictTypeCode 指定的指点条目，不能为空。
     * @return 所有对应的字典条目，不分上下级。
     */
    public List<Dict> findDictByDictTypeCode (@Param ("dictTypeCode") String dictTypeCode);

    /**
     * 获取所有字典对象
     * 
     * @param isExceptingNotLoadOnStart 如果为true，则加载标记loadOnStart为1的字典条目，否则加载所有。
     * @return 字典条目对象集合。
     */
    public List <Dict> findAllDict (@Param ("isExceptingNotLoadOnStart") boolean isExceptingNotLoadOnStart);

    // ======================================================================================

    /**
     * 根据类型编码获取一个字典类型
     * 
     * @param dictTypeCode 字典类型编码
     * @return 字典类型
     */
    public DictType getDictType (@Param ("dictTypeCode") String dictTypeCode);

    /**
     * 获取所有字典类型
     * 
     * @return 所有字典类型
     */
    public List <DictType> findAllDictType ();

    /**
     * 新增字典类型
     * 
     * @param dictType 字典类型对象，其中字典类型编码和类型名称不能为null.
     */
    public void addDictType (DictType dictType);

    /**
     * 修改字典类型
     * 
     * @param dictType 字典类型对象，其中字典类型编码和类型名称为null时将不会被修改
     */
    public void modifyDictType (DictType dictType);

    /**
     * 删除字典类型
     * 
     * @param dictTypeCode 字典类型编码，不能为null
     */
    public void removeDictType (@Param ("dictTypeCode") String dictTypeCode);

}
